#pragma once

#include <cmath>
#include "config.h"

namespace walker_sm
{
	class Message
	{
	public:

		Message()
			:timeStamp(-1)
			,msg(-1)
			,senderId(-1)
			,reciverId(-1)
			,extInfo(nullptr)
		{
		}

		Message(double timeStamp, int msg, int senderId, int reciverId, void* extInfo)
		{
			this->timeStamp=timeStamp;
			this->msg=msg;
			this->senderId=senderId;
			this->reciverId=reciverId;
			this->extInfo=extInfo;
		}

		virtual ~Message()
		{
		}

	public:
		double timeStamp;
		int msg;
		int senderId;
		int reciverId;
		void* extInfo;
	};

	inline bool operator==(const Message& msgA, const Message& msgB)
	{
		return msgA.msg == msgB.msg 
			&& msgA.reciverId == msgB.reciverId 
			&& msgA.senderId == msgB.senderId 
			&& std::abs(msgA.timeStamp - msgB.timeStamp) < MSG_EPS;
	}

	inline bool operator<(const Message& msgA, const Message& msgB)
	{
		return msgA.timeStamp < msgB.timeStamp;
	}

}

